import { Entity, PrimaryGeneratedColumn, Column, CreateDateColumn, UpdateDateColumn, ManyToMany } from 'typeorm'
import { Role } from './role.entity'

/**
 * 权限实体
 * 用于定义系统中的权限，如用户管理、角色管理等
 */
@Entity('va_permissions')
export class Permission {
  /** 权限主键ID */
  @PrimaryGeneratedColumn()
  id: number

  /** 权限字符（唯一） */
  @Column({ unique: true, nullable: true })
  permission: string

  /** 权限名称 */
  @Column({ unique: true, nullable: true })
  name: string

  /** 权限显示名 */
  @Column()
  label: string

  /** 权限描述 */
  @Column({ type: 'text', nullable: true })
  description: string

  /** 权限类型（menu: 菜单权限, button: 按钮权限, api: 接口权限） */
  @Column({ default: 'menu' })
  type: string

  /** 权限路径（菜单路径或接口路径） */
  @Column({ nullable: true })
  path: string

  /** 权限方法（GET, POST, PUT, DELETE等） */
  @Column({ nullable: true })
  method: string

  /** 父级权限ID */
  @Column({ nullable: true })
  parentId: number

  /** 权限排序 */
  @Column({ default: 0 })
  sort: number

  /** 权限状态（1: 启用, 0: 禁用） */
  @Column({ default: 1 })
  status: number

  /** 菜单图标 */
  @Column({ nullable: true })
  icon: string

  /** 是否隐藏菜单 */
  @Column({ default: false })
  hidden: boolean

  /** 前端组件路径 */
  @Column({ nullable: true })
  component: string

  /** 重定向路径 */
  @Column({ nullable: true })
  redirect: string

  /** 当只有一个子项时是否总是显示本层 */
  @Column({ default: true })
  alwaysShow: boolean

  /** 元数据 */
  @Column({ type: 'json', nullable: true })
  meta: object

  /** 创建时间 */
  @CreateDateColumn()
  createdAt: Date

  /** 更新时间 */
  @UpdateDateColumn()
  updatedAt: Date

  /** 拥有此权限的角色列表 */
  @ManyToMany(() => Role, (role) => role.permissions)
  roles: Role[]
}
